package cn.wolfcode.service;

import cn.wolfcode.domain.OperateIntergralVo;
import io.seata.rm.tcc.api.BusinessActionContext;
import io.seata.rm.tcc.api.BusinessActionContextParameter;
import io.seata.rm.tcc.api.LocalTCC;
import io.seata.rm.tcc.api.TwoPhaseBusinessAction;
import org.apache.ibatis.annotations.Param;


@LocalTCC  //分支事务的标志
public interface IUsableIntegralService {
    //减积分
    void decrIntergral(OperateIntergralVo operateIntergralVo);
    //加积分
    void incrInrergral(OperateIntergralVo operateIntergralVo);
    /*
        分布式事务分支事务（被调用的服务）：积分服务之加积分
     */
    @TwoPhaseBusinessAction(name = "initTry",
            commitMethod="incrIntergralConfirm",rollbackMethod = "incrIntergralRollback")
    void initTry(BusinessActionContext context,
                 @BusinessActionContextParameter(paramName = "operateIntergralVo")
                         OperateIntergralVo operateIntergralVo) throws InterruptedException;//将参数绑定到上下文
    void incrIntergralConfirm(BusinessActionContext context);
    void incrIntergralRollback(BusinessActionContext context);
}
